/*
 * leitura.c
 *
 *  Created on: 05/06/2011
 *      Author: joao e sheila
 */

/*esse .c faz a leitura das linhas*/

#include "leitura.h"

/*Verifica se determinado char é uma letra */
int ehLetra (char c){
    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
        return 1;

    return 0;
}

/*Funcao que separa palavras dentro de uma string qualquer, e a retorna */
char *retornaPalavra (char linha[MAX_LINHA], int *i){
    char* palavra;
    palavra =(char *) malloc (100*sizeof(char));
    int j = 0;
    while(ehLetra(linha[*i])){
        palavra[j] = linha[*i];
        *i = *i + 1;
        j++;
    }
    palavra[j] = '\0';
    return palavra;
}

char *retornaLivro (char linha[MAX_LINHA], int i){
    char* palavra;
    palavra =(char *) malloc (100*sizeof(char));
    int j = 0;
    while(ehLetra(linha[i])){
        palavra[j] = linha[i];
        i = i + 1;
        j++;
    }
    palavra[j] = '.';
    palavra[j+1] = 't';
    palavra[j+2] = 'x';
    palavra[j+3] = 't';
    palavra[j+4] = '\0';
    return palavra;
}

/* Funcao que imprime para o arquivo de indice, faz um arquivo com as palavras, os arquivos e as linhas */
void geraIndicePreOrdem (no *P, FILE *fp){
    TipoPosicao i;
    int aux;

    if (P == NULL) return;

    if (P->esq != NULL)
        geraIndicePreOrdem(P->esq, fp);

    fprintf(fp, "%s \n", P->chave);

    for (i = 0; i < P->listaarq.comp_arquivo; i++){ //todos livros
        fprintf(fp, "  %s \n" , AcessaArquivo(i, &P->listaarq).nome_arquivo ); //imprime nome do livro

        for(aux=0; aux<(AcessaArquivo(i, &P->listaarq).linha_do_arquivo.comp); aux++)
        	fprintf(fp, "    %d ", AcessaArquivo(i, &P->listaarq).linha_do_arquivo.elementos[aux]);

        fprintf(fp,"\n");

    }

    fprintf(fp, "\n");

    if(P->dir != NULL)
        geraIndicePreOrdem(P->dir, fp);

}

/*Funcao que gera arquivo de indice em pre-ordem */
void geraIndice (no *P){
    FILE *fp;
    if ( (fp = fopen(indice, "w")) == NULL){
            printf("erro ao abrir o arquivo de indice.");
    } else {
        geraIndicePreOrdem(P, fp);
        fclose(fp);
        printf("Arquivo de indice gerado com sucesso - %s.\n", indice);
    }

}


/*Funcao que faz a primeira leitura do arquivo e joga as palavras para a arvore AVL */
no* lerArquivo (char *nome_livro, no *P){
    FILE *fp;
    char linha[MAX_LINHA];
    char *palavra;
    int linha_atual = 1, i;


    if( (fp = fopen(nome_livro, "rb")) == NULL){ /* Para simplificar, estou considerando que o nome do meu arquivo é só de letras*/
        printf("Erro ao abrir o arquivo.\n");
    } else {

        /* Varre as linhas, pegando as palavras de cada */
        while(fgets(linha, MAX_LINHA, fp) != NULL){

            i = 0;


            /* Separa as palavras */
            while(linha[i] != '\0'){
                if (ehLetra(linha[i])){
                    palavra = (char *)malloc(100*sizeof(char));
                    strcpy(palavra, retornaPalavra(linha, &i));
                    insereAVL(palavra, &P, linha_atual, nome_livro);
                }
                i++;
            }

            linha_atual++;

        }
    }
 return P;

}
